package br.com.bacabeleireiros.sysbeleza.dao.impl;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import br.com.bacabeleireiros.sysbeleza.dao.IProdutoDAO;
import br.com.bacabeleireiros.sysbeleza.entity.Produto;
import br.com.bacabeleireiros.util.persistence.impl.GenericDAOImpl;

@Repository
public class ProdutoDAOImpl extends GenericDAOImpl<Produto, Serializable> implements IProdutoDAO, Serializable {

	private static final long serialVersionUID = 1L;

	public ProdutoDAOImpl() {
		
	}

	@Override
	public Produto salva(Produto produto) {
		return save(produto);
	}

	@Override
	public List<Produto> getAll() {
		return getAll(Produto.class);
	}

	@Override
	public void exclui(Produto produto) {
		remove(produto);
	}

	@Override
	public List<Produto> getAllProdutoDisponivel(Long idServico, String texto) {
		String SQL = "select p from Produto p "
				   + " where p.tipoProduto.idTipoProduto = 2"
				   + "   and  not exists (select sp from ServicoProduto sp "
				   + "                     where sp.produto.idProduto = p.idProduto "
				   + "                       and sp.servico.idServico = ?)";
		if (!texto.equals("")) {
			SQL += " and p.descProduto like ?";
		}
		Query query = em.createQuery(SQL);
		query.setParameter(1, idServico);
		if (!texto.equals("")) {
			query.setParameter(2, "%" + texto + "%");
		}
		return query.getResultList();
	}

	@Override
	public List<Produto> getListaProdutoSelecionado(String produtoSelelcionado) {
		String SQL = " from Produto p "
				   + "where upper(p.descProduto) like ?"
				   + "  and p.tipoProduto.idTipoProduto in (1,3)";
		Query query = em.createQuery(SQL);
		query.setParameter(1, produtoSelelcionado.toUpperCase() + "%");
		return query.getResultList();
	}

}
